package com.reform.service;

import com.reform.pojo.phase.BatchInfo;
import com.reform.pojo.phase.ViewBatch;
import com.baomidou.mybatisplus.extension.service.IService;
import com.reform.res.Result;

import java.sql.SQLException;
import java.util.List;

/**
 * <p>
 * VIEW 服务类
 * </p>
 *
 * @author mortale
 * @since 2021-08-06
 */
public interface IViewBatchService extends IService<ViewBatch> {

    /**
     * 获取所有批次信息
     * @return
     */
    Result getAllBatchInfo();

    /**
     * 最近一次批次信息
     * @return
     */
    ViewBatch getLatelyBatchInfo();

    /**
     * 创建批次
     * @param batchInfo
     * @return
     */
    Result creatBatch(BatchInfo batchInfo) throws SQLException;

    /**
     * 修改批次信息
     * @param batchInfo
     * @return
     * @throws SQLException
     */
    Result updateBatch(BatchInfo batchInfo) throws SQLException;

    /**
     * 删除批次
     * @param batchId
     * @return
     * @throws SQLException
     */
    Result deleteBatch(String batchId) throws SQLException;

    /**
     * 查询批次下最大主持数
     * @param batch_id
     * @return
     */
    Result selectMaxHost(String batch_id) throws SQLException;

    /**
     * 查询批次下最大参与数
     * @param batch_id
     * @return
     */
    Result selectMaxParticipants(String batch_id) throws SQLException;

    /**
     * 获取批次id
     * @return
     */
    List<String> getBatchId() throws SQLException;

    /**
     * 查询该批次下所有项目的类别信息
     * @param batch_id
     */
    Result selectClassificationByBatchId(String batch_id) throws SQLException;

    /**
     * 通过部门id获取已授权批次信息
     * @param depId
     * @return
     */
    Result getBatchByDepId(int depId);

    /**
     * 根据获取全部批次信息
     * @param batchId
     * @return
     */
    Result getAllBatchById(String batchId);

    /**
     * 根据专家工号获取批次信息
     * @param gh
     * @return
     */
    Result getBatchIdByGH(String gh) throws SQLException;

    /**
     * 根据phaseId获取BatchId
     * @param phaseId phaseId
     */
    List<String> getBatchIdByPhaseId(String phaseId);

    /**
     * 获取批次id和名称
     * @return
     */
    Result getBatchName();

    /**
     * 批次中有项目为延期，其所在阶段为结项
     * @return
     */
    Result getBatchInfoIncludeDelay(Integer batchStatus);
}
